<!DOCTYPE html>
<meta charset="UTF-8"> 
<html>
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-125261808-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-125261808-1');
</script>
<link href='https://fonts.googleapis.com/css?family=Roboto Condensed' rel='stylesheet'>
<style>

body {
  margin-top: 5vw;
  margin-left: 10vw;
  margin-right: 10vw;
   padding: 0;
  font-size: 100%;
  font-family: 'Roboto Condensed', 'Tahoma', 'Arial', sans-serif;
}


   ul.tree a {
    color: back;
    text-decoration: none;
    display: block;
    width: 100%;
   }
   ul.tree a:hover {
    background: lightgray;
    text-decoration: none;
    display: inline-block;
    width: 100%;
   }
img.logo {max-width: 300px;}

   li {
     list-style-type: none;
     background:  repeat-y;
     padding: 0;
   }


   ul.tree, ul.tree ul {
     list-style-type: none;
     background:  repeat-y;
     margin: 0;
     padding: 0;
     margin: 0.1vw;
   }

   ul.tree ul {
     list-style-type: none;
     margin-left: 0.1vw;
   }

ul.tree li {
     margin: 0.1vw;
     padding: 0.1vw 1vw;
     line-height: 100%;
     color: #369;
   }


a {
    color: black;
}


   ul.tree li.last {
     background: #fff url(images/lastnode.png) no-repeat;
   }

   ul.topnav {
    list-style-type: none;
    padding: 0;
    margin: 0;
    overflow: hidden;
    background-color: #333;
    font-size: 1.5vw;
    text-align: center;
}

ul.topnav li {float: left;
     list-style-type: none;
}

ul.topnav li a {
    display: block;
    color: white;
    text-align: center;
    padding: 0.2vw 0.0cm;
    width: 8.5vw;
    text-decoration: none;
    font-size: 1.2vw;
}
ul.topnav li a:hover:not(.active) {background-color: #111;}
ul.topnav li a.active {background-color: #4CAF50;}
ul.topnav li.right {float: right;}


pre, code { font-size:12px; }
tt { font-size: 1.2em; }
pre { margin:0px 0px 20px; }
pre.codeinput { padding:10px; border:1px solid #d3d3d3; background:#f7f7f7; }
pre.codeoutput { padding:10px 11px; margin:0px 0px 20px; color:#4c4c4c; }
pre.error { color:red; }

@media print { pre.codeinput, pre.codeoutput { word-wrap:break-word; width:100%; } }

span.keyword { color:#0000FF }
span.comment { color:#228B22 }
span.string { color:#A020F0 }
span.untermstring { color:#B20000 }
span.syscmd { color:#B28C00 }

.footer { width:auto; padding:10px 0px; margin:25px 0px 0px; border-top:1px dotted #878787; font-size:0.8em; line-height:140%; font-style:italic; color:#878787; text-align:left; float:none; }
.footer p { margin:0px; }
.footer a { color:#878787; }
.footer a:hover { color:#878787; text-decoration:underline; }
.footer a:visited { color:#878787; }

table th { padding:7px 5px; text-align:left; vertical-align:middle; border: 1px solid #d6d4d4; font-weight:bold; }
table td { padding:7px 5px; text-align:left; vertical-align:top; border:1px solid #d6d4d4; }

img.logo {max-width: 25vw;}

.caret {
  cursor: pointer;
  -webkit-user-select: none; /* Safari 3.1+ */
  -moz-user-select: none; /* Firefox 2+ */
  -ms-user-select: none; /* IE 10+ */
  user-select: none;
}

.caret::before {
  content: "\25B6";
  color: black;
  display: inline-block;
  margin-right: 6px;
}

.caret-down::before {
  -ms-transform: rotate(90deg); /* IE 9 */
  -webkit-transform: rotate(90deg); /* Safari */'
  transform: rotate(90deg);  
}

.nested {
  display: none;
}

.active {
  display: block;
}

 ul.tree a:hover {
    background: lightgray;
    text-decoration: none;
    display: inline-block;
    width: 100%;
   }


   ul.simple li {
     list-style-type: square;
     background:  repeat-y;
     padding: 0;
   }


</style>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_CHTML"></script>
</head>
<body> 
<img class="logo" src="ValoMC_logo.png">
<ul class="topnav">
<font size="4">
  <li><a href="index.html">Home</a></li>
  <li><a href="download.html">Download</a></li>
  <li><a href="features.html">Features</a></li>
  <li><a href="installation.html">Installation</a></li>
  <li><a class="active" href="documentation.html">Documentation</a></li>
  <li class="right"><a href="about.html">About</a></li>
</font>
</ul>

<div style="padding:0 0vw; width: auto;">
  <h2></h2>
  <p></p>
  <p></p>
<font size="4">
<div class="bottomhalf" style="width: 100%;">
    <div style="width: 20%; float: left;">
<br> 
<ul style="padding: 0 0px" class="tree">
<li>
<span class="caret"> Documentation</span>
<ul class="nested">
<li>
<a href="gettingstarted.html"> Getting started</a>
</li>
<li>
<span class="caret"> 2D Code documentation</span>
<ul class="nested">
<li>
<a href="structures.html"> List of structures</a>
</li>
<li>
<a href="findingelements.html"> Finding elements</a>
</li>
<li>
<a href="findingboundaries.html"> Finding boundaries</a>
</li></ul>
<li>
<span class="caret"> 2D Examples</span>
<ul class="nested">
<li>
<a href="simpletest.html"> Simple example</a>
</li>
<li>
<a href="inhomogeneous.html"> Creating an inhomogeneous medium</a>
</li>
<li>
<a href="directingls.html"> Directing light sources</a>
</li>
<li>
<a href="boundarytest.html"> Setting boundary conditions and visualising the boundary solution</a>
</li>
<li>
<a href="frequency.html"> Frequency domain calculation</a>
</li>
<li>
<a href="netgentest.html"> Working with NetGen</a>
</li>
<li>
<a href="generatingc.html"> Generating input for the external executable</a>
</li>
<li>
<a href="pixeltest.html"> Working with pixel format data</a>
</li>
<li>
<a href="toasttest.html"> Working with Toast++</a>
</li>
<li>
<a href="kwavetest.html"> Simulating the photoacoustic effect using K-Wave</a>
</li></ul>
<li>
<span class="caret"> 3D Code documentation</span>
<ul class="nested">
<li>
<a href="structures3d.html"> List of structures</a>
</li>
<li>
<a href="findingelements3d.html"> Finding elements</a>
</li>
<li>
<a href="findingboundaries3d.html"> Finding boundaries</a>
</li></ul>
<li>
<span class="caret"> 3D Examples</span>
<ul class="nested">
<li>
<a href="voxeltest.html"> Working with voxel format data</a>
</li>
<li>
<a href="netgentest3d.html"> Working with NetGen</a>
</li>
<li>
<a href="threedmodel.html"> Digimouse example</a>
</li></ul>
<li>
<a href="functionreference.html"> Alphabetical function listing</a>
</li></ul>
<li>
<a href="literature.html"> Literature</a>
</li>
</ul>
    </div>
    <div style="margin-left: 20%; padding: 1vw;" class="maintext"> 
<div class="content"><h1>Working with pixel format data: pixeltest.m</h1><!--introduction--><p>Often imaging data is provided in pixel format. However, as ValoMC uses triangles as the basis elements, the data are not directly compatible. This example demonstrates how to move between the two formats.</p><!--/introduction--><h2>Contents</h2><div><ul><li><a href="#1">Creating a 2d mesh for pixel data</a></li><li><a href="#2">Accessing grid elements using one dimensional indexing</a></li><li><a href="#3">Visualize the solution</a></li><li><a href="#4">Accessing elements using two dimensional indexing</a></li><li><a href="#5">Visualize the solution as a pixel map</a></li></ul></div><h2 id="1">Creating a 2d mesh for pixel data</h2><p>To create a mesh that can be easily mapped to a pixel grid the function createGridMesh can be used</p><pre class="codeinput">clear <span class="string">all</span>;

x_arr = -2:0.01:2;
y_arr = -2:0.01:2;

vmcmesh = createGridMesh(x_arr, y_arr); <span class="comment">% function provided by ValoMC</span>

<span class="comment">% createGridMesh will create a mesh with the following mapping between</span>
<span class="comment">% x_arr and y_arr</span>
<span class="comment">%</span>
<span class="comment">% The mesh that is created has the following structure</span>
<span class="comment">%</span>
<span class="comment">%  o-------o--------o</span>
<span class="comment">%  |       |        |</span>
<span class="comment">%  |   x2  |   x4   |c1</span>
<span class="comment">%  |       |        |</span>
<span class="comment">%  o-------o--------o</span>
<span class="comment">%  |       |        |</span>
<span class="comment">%  |   x1  |   x3   |</span>
<span class="comment">%  |       |        |</span>
<span class="comment">%  o-------o--------o</span>
<span class="comment">%</span>
<span class="comment">%  o = mesh coordinates</span>
<span class="comment">%  x = x_arr, y_arr point</span>
<span class="comment">%</span>
<span class="comment">%  The triangular mesh is constructed in the following fashion</span>
<span class="comment">%</span>
<span class="comment">%  3--b1---6--b2---9</span>
<span class="comment">%  | .  t6 | .  t8 |</span>
<span class="comment">%  b9  .   |   .   b4</span>
<span class="comment">%  | t2  . | t4  . |</span>
<span class="comment">%  2-------5-------8</span>
<span class="comment">%  | .  t5 | .  t7 |</span>
<span class="comment">%  b8  .   |   .   b5</span>
<span class="comment">%  | t1  . | t3  . |</span>
<span class="comment">%  1---b7--4---b6--7</span>
<span class="comment">%</span>
<span class="comment">%  t_i = triangle</span>
<span class="comment">%  b_i = boundary element</span>
<span class="comment">%  numbers = vertex indices</span>
<span class="comment">%</span>
<span class="comment">% Note that there are two triangles for each grid point (x_arr,y_arr)</span>
<span class="comment">% and the order of the triangle indices. This means that when using one</span>
<span class="comment">% dimensional indexing to assign values to the medium, the assignments must be</span>
<span class="comment">% repeated assign values to the lower triangles.</span>

vmcmedium = createMedium(vmcmesh);
</pre><h2 id="2">Accessing grid elements using one dimensional indexing</h2><p>Create example data in pixel format</p><pre class="codeinput">[X,Y] = meshgrid(x_arr,y_arr); <span class="comment">% MATLAB function</span>
F = ((X.*exp(-X.^2-Y.^2)) +1)*0.2-0.1;

<span class="comment">% Note that since there are twice as many triangles as there are grid</span>
<span class="comment">% cells, medium.absorption_coefficient is twice as big as F</span>

vmcmedium.scattering_coefficient = 0.1;
vmcmedium.absorption_coefficient = repmat(F(:),2,1); <span class="comment">% repeat F twice</span>
vmcmedium.scattering_anisotropy = 0.9;
vmcmedium.refractive_index = 1;

figure;

patch(<span class="string">'Faces'</span>, vmcmesh.H, <span class="string">'Vertices'</span>,vmcmesh.r, <span class="string">'FaceVertexCData'</span>, <span class="keyword">...</span>
      vmcmedium.absorption_coefficient, <span class="string">'FaceColor'</span>, <span class="string">'flat'</span>, <span class="string">'EdgeColor'</span>,<span class="string">'none'</span>);
xlabel(<span class="string">'[mm]'</span>);
ylabel(<span class="string">'[mm]'</span>);
c = colorbar;                             <span class="comment">% create a colorbar</span>
c.Label.String = <span class="string">'Absorption coefficient'</span>;

vmcboundary = createBoundary(vmcmesh, vmcmedium); <span class="comment">% create a boundary for the mesh</span>

<span class="comment">% Create a light source</span>

lightsource = findBoundaries(vmcmesh, <span class="string">'direction'</span>, [0 0], [0 -5], 1);
vmcboundary.lightsource(lightsource) = {<span class="string">'cosinic'</span>};

solution = ValoMC(vmcmesh, vmcmedium, vmcboundary);
</pre><pre class="codeoutput">                 ValoMC-2D
--------------------------------------------
  Version:  v1.0b-118-g853f111
  Revision: 131
  OpenMP enabled                     
  Using 16 threads
--------------------------------------------
Initializing MC2D...
Computing... 
...done

Done
</pre><img alt="" hspace="5" src="pixeltest_01.png" vspace="5"/> <h2 id="3">Visualize the solution</h2><pre class="codeinput">figure;
patch(<span class="string">'Faces'</span>, vmcmesh.H, <span class="string">'Vertices'</span>,vmcmesh.r, <span class="string">'FaceVertexCData'</span>, <span class="keyword">...</span>
      solution.element_fluence, <span class="string">'FaceColor'</span>, <span class="string">'flat'</span>, <span class="string">'EdgeColor'</span>,<span class="string">'none'</span>);
xlabel(<span class="string">'[mm]'</span>);
ylabel(<span class="string">'[mm]'</span>);
c = colorbar;                             <span class="comment">% create a colorbar</span>
c.Label.String = <span class="string">'Fluence [W/mm2]'</span>;
</pre><img alt="" hspace="5" src="pixeltest_02.png" vspace="5"/> <h2 id="4">Accessing elements using two dimensional indexing</h2><p>To avoid having to perform all assignments two times, optionally the medium can be defined using two-dimensional indexing.  If two dimensional indexing is used, ValoMC will assume that createGridMesh has been used to create the mesh. In addition to the solution.element_fluence, ValoMC will return solution.grid_fluence, which represents the fluence in each grid cell. It is calculated as an average of the the two triangles in a grid cell.</p><pre class="codeinput">clear <span class="string">vmcmedium</span>;        <span class="comment">% destroy the previous medium structure</span>
clear <span class="string">boundary</span>;


vmcmedium.scattering_coefficient = 0.1;
vmcmedium.absorption_coefficient = F; <span class="comment">% two dimensional array</span>
vmcmedium.scattering_anisotropy = 0.9;
vmcmedium.refractive_index = 1;


vmcboundary = createBoundary(vmcmesh, vmcmedium);

lightsource = findBoundaries(vmcmesh, <span class="string">'direction'</span>, [0 0], [0 -5], 1);
vmcboundary.lightsource(lightsource) = {<span class="string">'cosinic'</span>};

solution = ValoMC(vmcmesh, vmcmedium, vmcboundary);
</pre><pre class="codeoutput">                 ValoMC-2D
--------------------------------------------
  Version:  v1.0b-118-g853f111
  Revision: 131
  OpenMP enabled                     
  Using 16 threads
--------------------------------------------
Initializing MC2D...
Computing... 
...done

Done
</pre><h2 id="5">Visualize the solution as a pixel map</h2><p>It is convenient to use imagesc to visualize the solution returned in grid_fluence.</p><pre class="codeinput">figure
imagesc(x_arr, y_arr, (solution.grid_fluence), [min((solution.grid_fluence(:))) <span class="keyword">...</span>
        max((solution.grid_fluence(:)))]);

xlabel(<span class="string">'[mm]'</span>);
ylabel(<span class="string">'[mm]'</span>);
c = colorbar;                             <span class="comment">% create a colorbar</span>
c.Label.String = <span class="string">'Fluence [J/mm^2]'</span>;
</pre><img alt="" hspace="5" src="pixeltest_03.png" vspace="5"/> <p class="footer"><br/><a href="http://www.mathworks.com/products/matlab/">Published with MATLAB® R2016b</a><br/></p></div>
    </div>
</div>
</font>
  </div>

<script>


document.body.style.fontSize = (screen.width*0.01).toString() + "px";

document.getElementsByClassName("bottomhalf")[0].style.fontSize = (screen.width*0.01).toString() + "px"

var toggler = document.getElementsByClassName("caret");
var i;

toggler[0].parentElement.querySelector(".nested").classList.toggle("active");
toggler[0].classList.toggle("caret-down");

for (i = 1; i < toggler.length; i++) {
  
    if (localStorage.getItem("vmenutoggler" + i.toString())) {
        myvalue = localStorage.getItem("vmenutoggler" + i.toString());
        if(myvalue) {
          toggler[i].parentElement.querySelector(".nested").classList.toggle("active");
          toggler[i].classList.toggle("caret-down");
         }
    }
}

for (i = 0; i < toggler.length; i++) {
  toggler[i].mynumber = i;
  toggler[i].addEventListener("click", function() {
    this.parentElement.querySelector(".nested").classList.toggle("active");
    if(this.classList.toggle("caret-down")) {
       localStorage.setItem("vmenutoggler" + this.mynumber.toString(), "true");
    } else {
       localStorage.removeItem("vmenutoggler" + this.mynumber.toString());
    }
  });
}

</script>

<br>
<br> </div><footer> <hr> <p>Last updated: Tue Apr  9 11:54:30 EEST 2019 by aleksle</p></footer> </body> </html>

